package com.domi.service;

import com.domi.bean.RestfulResponse;
import com.domi.config.FeignConfiguration;
import com.domi.service.fallback.UnstableBookServiceFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;

// @FeignClient:
// name：提供者配置的spring.application.name微服务名称, 用于服务发现
// url：指定服务的地址, 当配置url时, name只起名称的作用, 不经过负载均衡. url="http://192.168.220.129:8848"
// path：提供者controller根(@RequestMapping)配置的路径, 为接口访问提供统一的前缀, 如果没有可以省略
// contextId：当服务(name)有很多个接口时, 不想全部定义在同一个类时, 使用多个接口来定义(name配置的值相同), 启动会报错. 用contextId指定不同的值就不会冲突了
// decode404：如果为true, 当调用请求发生404错误时, 那么会执行decoder解码, 否则抛出异常. 数据格式：{"timestamp":"2020-01-05T09:18:13.154+0000","status":404,"error":"Not Found","message":"No message available","path":"/user/get11"}
// configuration：指定配置类, 可以配置Feign的Encoder、Decoder、LogLevel、Retryer等
// fallback：容错的处理类, 也就是回退逻辑, 不能知道错误信息
// fallbackFactory：需要实现FallbackFactory接口, 可以知道错误信息
@Service
@FeignClient(
        name = "book-center",
        path = "/book",
        contextId = "case2",
        configuration = FeignConfiguration.class,
        fallback = UnstableBookServiceFallback.class
)
public interface UnstableBookService {

    @GetMapping("/flight")
    RestfulResponse flight();

}